package com.example.a0904;

import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.TextView;

import java.io.IOException;

public class MusicPlayer extends AppCompatActivity {

    CheckBox ch1,ch2;
    TextView txt;
    ImageButton mStopButton,mStartButton,mPauseButton;
    MediaPlayer mMediaPlayer;
    //String sdcard_file = "/storage/emulated/0/Music/mountain.mp3";  // 实际Nexus 6 中的存储路经
    String sdcard_file="/sdcard/music/mountain.mp3";  // SD卡的数据路经，实际存储路径如上
    int res_file = R.raw.mountain;   // res/raw文件夹下面的信息

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music_player);

        ch1 = (CheckBox)findViewById(R.id.check1);
        ch2 = (CheckBox)findViewById(R.id.check2);
        txt = (TextView) findViewById(R.id.text1);
        mStopButton = (ImageButton) findViewById(R.id.Stop); // 以下6行代码处理按钮事项
        mStartButton = (ImageButton) findViewById(R.id.Start);
        mPauseButton = (ImageButton) findViewById(R.id.Pause);
        mStopButton.setOnClickListener(new mStopClick());
        mStartButton.setOnClickListener(new mStartClick());
        mPauseButton.setOnClickListener(new mPauseClick());
        setRegist();  // 自定义函数，动态获取读取SD卡读写权限
    }

    // 动态获得本地存储SD卡读写权限
    // Android 6.0 （API23）之后，文件读写除了要在Manifest中声明权限，还要使用如下代码动态获取
    private void setRegist(){
        if (Build.VERSION.SDK_INT >= 23) {
            int REQUEST_CODE_CONTACT = 101;
            final int REQUEST_EXTERNAL_STORAGE = 1;
            String[] PERMISSIONS_STORAGE = {
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };
            // 验证是否权限许可
            for (String str : PERMISSIONS_STORAGE){
                if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED){
                    this.requestPermissions(PERMISSIONS_STORAGE,REQUEST_CODE_CONTACT); //申请权限
                    return;
                }
            }
        }
    }//setRegist
    // 播放SD卡或其他路径的音乐文件
    private void playMusic(String path) {
        try {
            mMediaPlayer.reset();  // 重置MediaPlayer对象，使之处于空闲状态
            mMediaPlayer.setDataSource(path); // 设置播放的路径
            mMediaPlayer.prepare();  // 请求资源，准备播放
            mMediaPlayer.start();  // 开始播放
        } catch (IOException e) {
        }
    }

    // 停止按钮处理
    class mStopClick implements OnClickListener{
        @Override
        public void onClick(View v){
            if (mMediaPlayer.isPlaying()){  // 判断是否正在播放
                mMediaPlayer.reset();   // 重置
                mMediaPlayer.release();  // 释放占用的资源
            }
        }
    } //mStopClick

    // 播放按钮事件
    class mStartClick implements OnClickListener {
        @Override
        public void onClick(View v) {
            String str = "正在播放：";
            if(ch1.isChecked()){   // checkbox1 指引的是播放资源文件
                str = str + "\n" + ch1.getText();
                try{
                    mMediaPlayer = MediaPlayer.create(MusicPlayer.this,res_file);
                    mMediaPlayer.start();
                }
                catch (Exception e){ Log.i("checkbox 1","res file  err ...");  }
            }

            if(ch2.isChecked()){  // checkbox1 指引的是播放资源文件
                str = str + "\n" + ch2.getText();
                try{
                    mMediaPlayer = new MediaPlayer();
                    mMediaPlayer.setDataSource(sdcard_file);
                    playMusic(sdcard_file);  // 调用自定义播放函数
                }
                catch (Exception e){ Log.i("checkbox 2","sdcard err ...");  }
            }
            txt.setText(str);  // 文本框输出信息
        }
    } //mStartClick

    // 暂停事件处理
    class mPauseClick implements OnClickListener{
        @Override
        public void onClick(View v)
        {
            if (mMediaPlayer.isPlaying())  //第一次按下暂停健处理
            {
                mMediaPlayer.pause();
            }
            else                         // 重复按暂停键
            {
                mMediaPlayer.start();
            }
        }
    } //mPauseClick

} // class MusicPlayer
